data synchronization algorithms